﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Persistencia;
using GestorDeFlotasModelo.Entities;
using System.Data.SqlClient;
using Persistencia.Interfaces;

namespace GestorDeFlotasModelo.Factorias
{
    public class FactoriaRol : Factoria, IIdentityFactory

    {
         private FactoriaRol(TransaccionBase tran)
            : base(tran)
        {
        }
       

        public override string NombreTabla
        {
            get { return " NUESTRA_RUBIA_ES_MEJOR.Rol "; }
        }

        protected override IPersistibleModelo NuevoPersistible(HashTableNCSensitive htsNc)
        {
            return new Rol();
        }

        protected override string Id(HashTableNCSensitive hts)
        {
            return hts["Rol_Id"].ToString();
        }

        internal Rol SelectRol(Int64 id)
        {
            SqlCommand comm = new SqlCommand();
            comm.CommandText = "SELECT * FROM "+this.NombreTabla+" WHERE Rol_Id=@Rol_Id";
            comm.Parameters.AddWithValue("@Rol_Id", id);
            List<Rol> roles = base.Select<Rol>(comm, delegate(IPersistibleModelo iPer) { return ((Rol)iPer).Id == id; }, 0);
            if (roles.Count > 0)
                return roles[0];
            else
                return null;
        }

        public List<Rol> SelectPorRolName(string rolName)
        {
            SqlCommand comm = new SqlCommand();
            comm.CommandText = "SELECT * FROM " + this.NombreTabla + " WHERE Rol_Nombre LIKE '%@Rol_Nombre%'";
            comm.Parameters.AddWithValue("@Rol_Nombre", rolName);

            List<Rol> roles = base.Select<Rol>(comm, delegate(IPersistibleModelo iPer) { return ((Rol)iPer).Nombre.ToLower().Contains(rolName.ToLower()); });

            if (roles.Count > 0)
                return roles;
            else
                return new List<Rol>();
        }

        protected override HashTableNCSensitive ParametrosClave()
        {
            HashTableNCSensitive parameters = new HashTableNCSensitive();
            parameters.Add("Rol_Id", null);
            return parameters;

 
        }

        protected override HashTableNCSensitive ParametrosNoClave()
        {
            HashTableNCSensitive parameters = new HashTableNCSensitive();
            parameters.Add("Rol_Nombre", null);
            parameters.Add("Rol_Habilitado", null);
            return parameters;
        }


        protected override Predicate<IPersistibleModelo> FiltroXId(string id)
        {
            return delegate(IPersistibleModelo iPer)
            {
                return ((Rol)iPer).Id == long.Parse(id);
            };
        }

        public Rol Nuevo(string rolName, bool habilitado, List<Funcionalidad> funcionalidades)
        {
            Rol rol = new Rol();
            rol.Habilitado = habilitado;
            rol.Nombre = rolName;
            rol.Funcionalidades = funcionalidades;
            base.Agregar(rol);
            return rol;
        }
    }
}
